消息系统提供一种通知事件和交换信息的方法。
MessageArguments
是在消息中传递的参数的基类。Kanzi 为不同的节点和触发器提供内置消息类型。例如,ButtonConcept::ClickedMessageArguments
消息用于按钮: 点击 (Button:Click) 触发器, Page::ActivatedMessageArguments
消息用于页面已激活 (Page Activated) 触发器。
您可以写入自己的消息类型来扩展MessageArguments
类。
消息类型描述:
ClickManipulator::ClickMessage
和 ListBoxConcept::ItemSelectedMessage
。您可以使用 PropertyType
对象来描述和访问消息参数。 MessageArguments::setArgument
函数集和 MessageArguments::getArgument
函数通过参数底层存储类型检索参数,如 float、Boolean、Vector3 等。
要将消息分派给处理程序,使用 Node::dispatchMessage
。该函数定义消息类型和参数,并调用为该消息类型的节点注册的所有处理程序。
Node::dispatchMessage
在函数调用返回之前立即通知处理程序,使处理程序能够立即对消息作出反应。
Kanzi 中的所有消息都是路由消息。当派发消息时,系统在隧道进程中从根节点经过达到消息目标,然后在冒泡进程中返回。在场景图中每个通过的节点处,系统寻找已派发消息的处理程序。这样您可以将处理程序安装在有效拦截消息的图形中任何位置,然后才能达到目的或从多个来源收集消息。
在冒泡阶段处理消息,在隧道阶段拦截或过滤消息。
接收程序作为函数实现,并作为指针传递到 Node::addMessageHandler()
和 kzuMessageDispatcherAddTunnellingHandler()
。要为接收程序的实现提供环境,注册时向用户数据提供指针。使用 Node::removeMessageHandler()
移除处理程序。
消息系统带有内置计时器消息支持,可使用 KzuMessageDispatcher
访问。kzuMessageDispatcherAddTimerHandler()
订阅计时器,而 kzuMessageDispatcherRemoveTimerHandler()
取消订阅计时器。订阅期间,设置计时器间隔和计时器行为:
要在 Kanzi Studio 中创建自定义消息:
请参阅设置触发器消息的处理。